﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WTwitter.Model.UserData;
using System.IO;
using System.Xml;
using System.Xml.Linq;

namespace WTwitter.Model.Utility {
	/// <summary>
	/// URL短縮サービスBit.lyとやりとりするためのクラス
	/// </summary>
	class BitlyUtility {
		//メモ：
		//できるだけアプリ内はJSON形式でのやりとりに統一したかったけど
		//bit.lyのJSON形式はキー値が動的に変わるので
		//DataContractJsonSerializerでは扱いにくかったのでXML形式にした

		/// <summary>
		/// URLを短縮する
		/// </summary>
		/// <param name="longUrl">短縮したいURL</param>
		/// <param name="setting">Bitlyにログインするための情報</param>
		/// <returns>短縮されたURL。取得に失敗した場合は元のURLをそのまま返す。</returns>
		public static string Shorten(string longUrl, BitlySetting setting) {
			var result = longUrl;
			var response = WebUtility.GetResponseWithoutAuth(
				@"http://api.bit.ly/shorten",
				"GET",
				new RequestParameter[] {
					new RequestParameter("login", setting.LoginName),
					new RequestParameter("apiKey", setting.APIKey),
					new RequestParameter("version", setting.Version),
					new RequestParameter("format", "xml"),
					new RequestParameter("longUrl", longUrl)
				}
			);
			using (var stream = response.GetResponseStream()) {
				var doc = new XmlDocument();
				doc.Load(stream);
				var elements = doc.GetElementsByTagName("shortUrl");
				if (elements.Count > 0) {
					result = elements[0].InnerText;
				}
			}
			return result;
		}
	}
}
